package com.shenjian.settings.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.shenjian.commons.exception.CustomException;
import com.shenjian.commons.utils.DataUtil;
import com.shenjian.commons.utils.MD5Util;
import com.shenjian.commons.utils.UUIDUtil;
import com.shenjian.settings.dao.UserDao;
import com.shenjian.settings.entity.DicValue;
import com.shenjian.settings.entity.User;
import com.shenjian.settings.service.DicValueService;
import com.shenjian.settings.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * (User)表服务实现类
 *
 * @author makejava
 * @since 2022-06-27 16:23:21
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
   private UserDao userDao;
    @Autowired
    private DicValueService dicValueService;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public User queryById(String id) {
        return userDao.selectById(id);
    }

    /**
     * 通过用户名查询单条数据
     * @param loginAct 用户名
     * @return
     */
    @Override
    public User queryByLoginAct(String loginAct) {
        return userDao.selectByLoginAct(loginAct);
    }

    /**
     * 分页查询
     *
     * @param pageNumber 当前页码
     * @param pageSize   每页条数
     * @param user       筛选条件
     * @return 查询结果
     */
    @Override
    public Map<String, Object> ListPage(Integer pageNumber, Integer pageSize, User user) {
        PageHelper.startPage(pageNumber, pageSize);
        PageInfo<User> pageInfo = new PageInfo<>(userDao.select(user));
        Map<String, Object> pageMap = new HashMap<>();

        pageMap.put("list", pageInfo.getList().stream().map(m ->{
            DicValue lockState = dicValueService.queryByTypeCode("lockState", m.getLockState());
            m.setLockState(lockState.getText());
            return m;
        }).collect(Collectors.toList()));
        pageMap.put("total", pageInfo.getTotal());
        return pageMap;
    }

    /**
     * 新增数据
     *
     * @param user 实例对象
     * @return 实例对象
     */
    @Override
    public boolean insert(User user) {
        //判断用户名是否重复
        User dbUser = userDao.selectByLoginAct(user.getLoginAct());
        if (dbUser != null) {
            throw new CustomException(-2, "用户名已存在");
        }
        //不重复,设置用户id
        user.setId(UUIDUtil.getUUID());
        //密码加密
        user.setLoginPwd(MD5Util.getMD5(user.getLoginPwd()));
        //设置创建时间和修改时间
        user.setCreateTime(DataUtil.formatDate(new Date()));
        user.setEditTime(DataUtil.formatDate(new Date()));

        return userDao.insert(user) > 0;
    }

    /**
     * 修改数据
     *
     * @param user 实例对象
     * @return 实例对象
     */
    @Override
    public boolean update(User user) {

        //设置修改时间
        user.setEditTime(DataUtil.formatDate(new Date()));
        return userDao.update(user) > 0;
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean remove(String id) {
        return userDao.deleteById(id) > 0;
    }

    /**
     * 通过主键删除数据
     *
     * @param ids 数组
     * @return 是否成功
     */
    @Override
    public boolean removeBatch(String[] ids) {
        return userDao.deleteBatch(ids) > 0;
    }

    /**
     * 查询所有数据
     */
    @Override
    public List<User> list() {
        //不做条件查询,传一个null值
        return userDao.select(null);
    }

}
